DNS服务器(三):子域授权及转发

一、DNS服务器子域授权的实现

        通常自己架设DNS服务器给自己使用的公司都是内部有特殊需求,或者公司内部域名较多,为了方便以后的管理而架设。我们知道一个域名就是一个区域,一般每个区域都会有专人负责管理,当一个公司人员足够多时,这时就会有划分子域给下级部门管理的需求。在一个区域下划分子域,并给子域指定一个新的DNS服务器,这种方法是可以实现的,我们通常称这种划分子区域的方法为子域授权。

        实例:给wubinary.com域名划分一个blog.wubinary.com的子域。bind的安装配置及主DNS服务器的架设不再此讨论

  1. 首先架设一个主DNS服务器,编辑/var/named/wubinary.com.zone文件,主DNS服务器的IP为192.168.0.6,资源记录数据文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$TTL 600
@ IN SOA dns.wubinary.com. dnsadmin.wubinary.com. (
2014031203
2H
4M
1D
2D )
@ IN NS dns.wubinary.com.
@ IN NS ns2.wubinary.com.
@ IN MX 10 mail.wubinary.com.
dns IN A 192.168.0.6
mail IN A 192.168.0.12
www IN A 192.168.0.48
ns2 IN A 192.168.0.80
blog.wubinary.com. IN NS dns.blog.wubinary.com.
dns.blog.wubinary.com. IN A 192.168.0.2

        注意,以上最后两行为子域的DNS服务器,只要在主DNS服务器定义好了子域的DNS服务器就等于给子域授权了。

  1. 然后在回到子域的服务器,192.168.0.2上配置子域区域。打开/etc/named.rfc1912.zones文件,在最末尾定义子域的区域。
1
2
3
4
zone "blog.wubinary.com" IN {
type master;
file "blog.wubinary.com.zone";
};
  1. 接着再定义子域DNS服务器的资源记录文件,/var/named/blog.wubinary.com.zone。
1
2
3
4
5
6
7
8
9
10
11
$TTL 600
@ IN SOA dns.blog.wubinary.com. dnsadmin.blog.wubinary.com. (
2014031201
1H
5M
3D
1D )
@ IN NS dns.blog.wubinary.com.
dns IN A 192.168.0.2
www IN A 192.168.0.78
ftp IN A 192.168.0.23
  1. 重新启动两边的DNS服务,测试一下子域授权是否成功。

        主域机器测试:

%EF%BC%9A%E5%AD%90%E5%9F%9F%E6%8E%88%E6%9D%83%E5%8F%8A%E8%BD%AC%E5%8F%91/01.jpeg?raw=true)

%EF%BC%9A%E5%AD%90%E5%9F%9F%E6%8E%88%E6%9D%83%E5%8F%8A%E8%BD%AC%E5%8F%91/02.jpeg?raw=true)

        子域机器测试:

%EF%BC%9A%E5%AD%90%E5%9F%9F%E6%8E%88%E6%9D%83%E5%8F%8A%E8%BD%AC%E5%8F%91/03.jpeg?raw=true)

        测试正常,操作成功!

二、DNS服务器域名解析转发

        DNS转发的意义在于,定向查询,一台DNS服务器在获取到查询请求时,自己不尝试解析域名,而转发查询请求给指定的DNS服务器实现此次解析操作。假设,我们现在碰到这么一种情况,我们的DNS服务器是处在一个内网的网段,与外网不能直接通信,在这个局域网中唯一一个能和外网通信的是路由器或者其它的DNS服务器。那么如果我们想要实现通过这台局域网的DNS服务器查询解析外网的域名,就要用到转发的功能了。

        转发可以用参数forwarders和forward实现:

1
2
forwarders { IP_ADDR1; IP_ADDR; ...};
forward { only|first };

        参数说明:

  • forwarders:用于定义转发的服务器的IP地址,可以写多个,用分号隔开。
  • forward:用于定义转发的操作,only为只作转发操作,有结果则返回结果,没有结果则什么操作也不作;first为先作转发操作,如果没有结果则去递归查找。

        全局和区域:

        这两个参数可以放在全局定义,也可放在区域定义,也可以两个同时使用,但不管怎样,放在区域的优先权更高。如果用于特定区域则把转发定义在区域内,如果用于全局,则把转发定义在全局。

        转发实例:让上面的区域wubinary.com可以实现解析外网的域名。

  1. 区域wubinary.com所设的DNS服务器为局域网的IP地址,不可以解析外网域名。

%EF%BC%9A%E5%AD%90%E5%9F%9F%E6%8E%88%E6%9D%83%E5%8F%8A%E8%BD%AC%E5%8F%91/04.jpeg?raw=true)

  1. 由上图可以看出wubinary.com区域不能解析51cto.com的NS记录,我们添加一个转发功能。

        编辑/etc/named.conf文件,添加转发ip 192.168.0.1

%EF%BC%9A%E5%AD%90%E5%9F%9F%E6%8E%88%E6%9D%83%E5%8F%8A%E8%BD%AC%E5%8F%91/05.jpeg?raw=true)

  1. 修改完成后,重启服务,测试一下,可以解析了,转发成功!

%EF%BC%9A%E5%AD%90%E5%9F%9F%E6%8E%88%E6%9D%83%E5%8F%8A%E8%BD%AC%E5%8F%91/06.jpeg?raw=true)

        说明:有的时候,如果我们事先已经知道了某个区域DNS服务器的地址,为了不让当前DNS服务器向根查询结果,那么我们就可以直接使用转发,向当前DNS服务器指定一个地址,让它查询直接向这个地址请求,这样做的好处能明显的提高响应速度。

三、DNS中的访问控制列表

        有的时候我们须要在DNS配置文件中指定n个IP地址,如果全都写在一起的话,每块地方都要写一次,那么相当麻烦,如果使用一个参数定义那一片的IP地址,那么管理起来就相当方便了,这个就是DNS中的ACL,bind支持的访问控制表。

        格式:

1
2
3
4
5
6
7
acl ACL_NAME {
172.16.0.0/16;
192.168.0.0/24
127.0.0.0/8;
...
...
};

        在全局选项中定义ACL,给每个ACL取一个名字,这样以后每次引用,只须在填定IP地址的地方填写那个变量就行了。在bind中有几个事先定义好的ACL:

1
2
3
4
any: 任何主机
none: 无一主机
local: 本机
localnet: 本机的所在的网络